// Fill in your client ID and client secret that you obtained
// while registering the application

// 这个地方的clientID clientSecret 换成 你在github中注册好之后，github提供给你的账号密码；
const clientID = 'b6777752e4ffb7bd7e59618d709cafadd08ca89f59acaffafe66bef5ccbaf341'

const clientSecret = 'ecdc090848ac25f98d63c1d8e35a2bc2924569b6e9c3e276f41152255ba95c9c'

const Koa = require('koa');
const path = require('path');
const serve = require('koa-static');
const route = require('koa-route');
const axios = require('axios');

const app = new Koa();
// 读取静态资源
const main = serve(path.join(__dirname + '/public'));

// koa-中间件，app.use -> 全局中间价
// 注册在路由地址后面的，是单个的中间价


const oauth = async ctx => {
  // console.log('ctx.: ', ctx.query, ctx.request.query)
  // 从github跳转到后台，同时会携带一个code值（临时身份id）;
  const requestToken = ctx.request.query.code;
  // const redirect_uri = 'http://localhost:8080/oauth/redirect'
  console.log('authorization code:', requestToken);
// https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}

// 401 授权： code失效了
   const tokenRes = await axios.post(`https://gitee.com/oauth/token?grant_type=authorization_code&code=${requestToken}&client_id=b6777752e4ffb7bd7e59618d709cafadd08ca89f59acaffafe66bef5ccbaf341&client_secret=ecdc090848ac25f98d63c1d8e35a2bc2924569b6e9c3e276f41152255ba95c9c`)

   let token = tokenRes.access_token;
   console.log('token: ', token)

  //  let userInfo = await axios.get(`https://gitee.com/api/v5/user?access_token=${token}`)

    const username = userInfo.login;

 // 重定向. 跳回到前端页面
  ctx.response.redirect(`/welcome.html?name=${username}`);



  // const tokenResponse = await axios({
  //   method: 'post',
  //   url: `https://gitee.com/oauth/token?
  //   grant_type=authorization_code&code=${requestToken}&
  //     client_id=${clientID}&
  //     client_secret=${clientSecret}&
  //     redirect_uri=${redirect_uri}
  //     `,
  //   headers: {
  //     accept: 'application/json'
  //   }
  // });
  // console.log('tokenResponse: ', tokenResponse)

  // 1. 拿临时身份id，去github(请求github已经提供好的接口)换取永久身份id （token）
  // const tokenResponse = await axios({
  //   method: 'post',
  //   url: 'https://github.com/login/oauth/access_token?' +
  //     `client_id=${clientID}&` +
  //     `client_secret=${clientSecret}&` +
  //     `code=${requestToken}`,
  //   headers: {
  //     accept: 'application/json'
  //   }
  // });

  // const accessToken = tokenResponse.data.access_token;
  // console.log(`access token: ${accessToken}`);

  // 拿到github的token,接下来我就可以任意请求，github的所有的接口。
  // 请求用户信息接口
  // const result = await axios({
  //   method: 'get',
  //   url: `https://api.github.com/user`,
  //   headers: {
  //     accept: 'application/json',
  //     Authorization: `token ${accessToken}`
  //   }
  // });
  // console.log(result.data);
  // const name = result.data.login;

 // 重定向. 跳回到前端页面
  // ctx.response.redirect(`/welcome.html?name=${name}`);
};


app.use(main);
// github会在同意登陆之后，授权跳转带回调地址；同时会携带一个code值
app.use(route.get('/oauth/redirect', oauth));

app.listen(8080);

/**
 *
 * RBAC权限： 登陆
 *
 * Oauth 2.0技术 登陆 （第三方授权登陆）
 *
 *
 * 1. 前端（登陆页面） -> 2. github后端 (code-临时身份id) ->
 *
 * 3. 公司后端 （请求token, 请求用户信息）--> 4. 前端（首页）
 *
 *
 * wx.login --> code ---> wx.request -- token
 *
 *
 * login/userInfo
 *
 *
 */
